#if !defined(_APP_SERIAL)
#define _APP_SERIAL

#include "app_device.h"
#include "termios.h"


// 波特率枚举
typedef enum
{
    BR_9600 = B9600,
    BR_115200 = B115200
} SERIAL_BAUD_RATE;

// 校验位枚举
typedef enum
{
    PARITY_NONE = 0, // 无校验位
    PARITY_ODD = PARENB | PARODD, // 奇校验位
    PARITY_EVEN = PARENB, // 偶校验位
} SERIAL_PARITY;

// 停止位枚举
typedef enum
{
    STOP_BIT_ONE = 0, // 1位停止位
    STOP_BIT_TWO = CSTOPB, // 2位停止位
} SERIAL_STOP_BIT;


/**
 * @brief 给一个设备进行串口设置
 * @param 设备指针
 * @return 0 设置成功，-1 设置失败
 */
int app_serial_init(app_device_t *device);


/**
 * @brief 设置波特率
 * @param 设备指针
 * @param 波特率
 * @return 0 设置成功，-1 设置失败
 */
int app_serial_set_baudrate(app_device_t *device, SERIAL_BAUD_RATE baudrate);


/**
 * @brief 设置停止位
 * @brief 设备指针
 *  @param 停止位
 * @return 0 设置成功，-1 设置失败
 */
int app_serial_set_stopbit(app_device_t *device, SERIAL_STOP_BIT stopbit);


/**
 * @brief 设置校验位
 * @param 设备指针
 * @param 校验位
 * @return 0 设置成功，-1 设置失败
 */
int app_serial_set_parity(app_device_t *device, SERIAL_PARITY parity);


/**
 * @brief 设置原始模式
 * @param 设备指针
 * @return 0 设置成功，-1 设置失败
 */
int app_serial_set_raw(app_device_t *device);

/**
 * @brief 设置阻塞 模式
 * @param 设备指针
 * @param 0 非阻塞，1 阻塞
 * @return 0 设置成功，-1 设置失败
 */
int app_serial_set_block(app_device_t *device, int block);
  

#endif // _APP_SERIAL
